/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Interfaz;

import static Auxiliares.MensajesCodigosError.ALUMNO_NO_ENCONTRADO;
import static Auxiliares.MensajesCodigosError.CAMPO_OBLIGATORIO;
import static Auxiliares.MensajesCodigosError.EQUIPO_NO_ENCONTRADO;
import static Auxiliares.MensajesCodigosError.EQUIPO_PRESTADO;
import static Auxiliares.MensajesCodigosError.HORA_ERROR;
import static Auxiliares.MensajesCodigosError.HORA_PASADA;
import static Auxiliares.MensajesCodigosError.INFO_ALUMNO_INCOMPLETA;
import static Auxiliares.MensajesCodigosError.NO_TIPO_PRESTAMO;
import Controladores.ControladorCamposTexto;
import Controladores.GestorAlumnos;
import Controladores.GestorEmpleados;
import Controladores.GestorEquiposComputo;
import Controladores.GestorMensajes;
import Controladores.GestorPrestamos;
import Interfaz.Altas.InterfazAltaAlumno;
import Interfaz.SubInterfaz.SubInterfazCredenciales;
import Modelo.Alumno;
import Modelo.Empleado;
import Modelo.EquipoComputo;
import Modelo.Prestamo;
import java.awt.Color;
import java.awt.Frame;
import java.awt.event.KeyEvent;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import javax.swing.JTextField;

/**
 *
 * @author Marko
 */
public class NuevoPrestamo extends javax.swing.JDialog {

    /**
     * Contructor para el registro de un nuevo prestamo
     * @param parent
     * @param modal
     */
    public NuevoPrestamo(
     java.awt.Frame parent, 
     boolean modal
    ) {
        super(parent, modal);
        initComponents();
        setLocationRelativeTo(parent);
        padre = parent;
        
        claveMatriculaCorrecta = false;
        numInventarioCorrecto = false;
        horaCorrecta = false;
        
        prestamoOriginal = "";
        this.getContentPane().setBackground(Color.white);
        controladorCampos = new ControladorCamposTexto();
        administradorMensajes = new GestorMensajes();
    }
    
    /**
     * constructor para la modificacion de un prestamo
     * @param parent
     * @param modal
     * @param _matricula
     * @param _numInventario
     * @param _horaDevolucion
     * @param _tipoPrestamo 
     */
    public NuevoPrestamo(
     java.awt.Frame parent, 
     boolean modal,
     String _matricula,
     String _numInventario,
     String _horaDevolucion,
     String _tipoPrestamo
    ) {
        super(parent, modal);
        initComponents();
        setLocationRelativeTo(parent);
        padre = parent;
        
        claveMatriculaCorrecta = true;
        numInventarioCorrecto = true;
        horaCorrecta = true;
        
        this.getContentPane().setBackground(Color.white);
        controladorCampos = new ControladorCamposTexto();
        administradorMensajes = new GestorMensajes();
        prestamoOriginal = _numInventario;
        corregirBotonModificar();
        llenarDatosAlumno(_matricula);
        llenarDatosPrestamo(_numInventario, _tipoPrestamo, _horaDevolucion);
    }
    
    /**
     * This method is called from within the constructor to initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is always
     * regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        buttonGroup1 = new javax.swing.ButtonGroup();
        jButtonModificar = new javax.swing.JButton();
        jPanelDatosAlumno = new javax.swing.JPanel();
        jTextFieldBuscarEmpeladoAlumno = new javax.swing.JTextField();
        jLabelNombre = new javax.swing.JLabel();
        jLabelLicenciatura = new javax.swing.JLabel();
        jLabelNombreEncontrado = new javax.swing.JLabel();
        jLabelLicenciaturaEncontrada = new javax.swing.JLabel();
        jPanelTipoPrestamo = new javax.swing.JPanel();
        jLabelTipoPrestamo = new javax.swing.JLabel();
        jRadioButtonPInterno = new javax.swing.JRadioButton();
        jRadioButtonPExterno = new javax.swing.JRadioButton();
        jPanelBotones = new javax.swing.JPanel();
        jButtonCancelar = new javax.swing.JButton();
        jButtonAceptar = new javax.swing.JButton();
        jPanelDatosPrestamo = new javax.swing.JPanel();
        jLabelDosPuntos = new javax.swing.JLabel();
        jTextFieldHora = new javax.swing.JTextField();
        jTextFieldMinutos = new javax.swing.JTextField();
        jLabelHoraDevolucion = new javax.swing.JLabel();
        jTextFieldNumInventario = new javax.swing.JTextField();
        jLabelPMAM = new javax.swing.JLabel();
        jLabelMarca = new javax.swing.JLabel();
        jLabelArticulo = new javax.swing.JLabel();
        jLabelMarcaEncontrada = new javax.swing.JLabel();
        jLabelArticuloEncontrado = new javax.swing.JLabel();
        jLabelDescription = new javax.swing.JLabel();
        jLabelDescripcionEncontrada = new javax.swing.JLabel();

        jButtonModificar.setText("Modificar");
        jButtonModificar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButtonModificarActionPerformed(evt);
            }
        });
        jButtonModificar.addKeyListener(new java.awt.event.KeyAdapter() {
            public void keyPressed(java.awt.event.KeyEvent evt) {
                jButtonModificarKeyPressed(evt);
            }
        });

        setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);

        jPanelDatosAlumno.setOpaque(false);

        jTextFieldBuscarEmpeladoAlumno.setForeground(new java.awt.Color(153, 153, 153));
        jTextFieldBuscarEmpeladoAlumno.setText("Buscar Alumno...");
        jTextFieldBuscarEmpeladoAlumno.addFocusListener(new java.awt.event.FocusAdapter() {
            public void focusGained(java.awt.event.FocusEvent evt) {
                jTextFieldBuscarEmpeladoAlumnoFocusGained(evt);
            }
            public void focusLost(java.awt.event.FocusEvent evt) {
                jTextFieldBuscarEmpeladoAlumnoFocusLost(evt);
            }
        });
        jTextFieldBuscarEmpeladoAlumno.addKeyListener(new java.awt.event.KeyAdapter() {
            public void keyPressed(java.awt.event.KeyEvent evt) {
                jTextFieldBuscarEmpeladoAlumnoKeyPressed(evt);
            }
            public void keyTyped(java.awt.event.KeyEvent evt) {
                jTextFieldBuscarEmpeladoAlumnoKeyTyped(evt);
            }
        });

        jLabelNombre.setText("Nombre           :");

        jLabelLicenciatura.setText("Licenciatura    :");

        javax.swing.GroupLayout jPanelDatosAlumnoLayout = new javax.swing.GroupLayout(jPanelDatosAlumno);
        jPanelDatosAlumno.setLayout(jPanelDatosAlumnoLayout);
        jPanelDatosAlumnoLayout.setHorizontalGroup(
            jPanelDatosAlumnoLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanelDatosAlumnoLayout.createSequentialGroup()
                .addContainerGap()
                .addGroup(jPanelDatosAlumnoLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                    .addGroup(jPanelDatosAlumnoLayout.createSequentialGroup()
                        .addGap(0, 240, Short.MAX_VALUE)
                        .addComponent(jTextFieldBuscarEmpeladoAlumno, javax.swing.GroupLayout.PREFERRED_SIZE, 105, javax.swing.GroupLayout.PREFERRED_SIZE))
                    .addGroup(jPanelDatosAlumnoLayout.createSequentialGroup()
                        .addGroup(jPanelDatosAlumnoLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false)
                            .addComponent(jLabelLicenciatura, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                            .addComponent(jLabelNombre, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                        .addGroup(jPanelDatosAlumnoLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addComponent(jLabelLicenciaturaEncontrada, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                            .addComponent(jLabelNombreEncontrado, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))))
                .addContainerGap())
        );
        jPanelDatosAlumnoLayout.setVerticalGroup(
            jPanelDatosAlumnoLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanelDatosAlumnoLayout.createSequentialGroup()
                .addContainerGap()
                .addComponent(jTextFieldBuscarEmpeladoAlumno, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(11, 11, 11)
                .addGroup(jPanelDatosAlumnoLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(jLabelNombre)
                    .addComponent(jLabelNombreEncontrado, javax.swing.GroupLayout.PREFERRED_SIZE, 19, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addGap(18, 18, Short.MAX_VALUE)
                .addGroup(jPanelDatosAlumnoLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(jLabelLicenciatura, javax.swing.GroupLayout.Alignment.TRAILING)
                    .addComponent(jLabelLicenciaturaEncontrada, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.PREFERRED_SIZE, 15, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );

        jPanelTipoPrestamo.setOpaque(false);

        jLabelTipoPrestamo.setText("Seleccione el tipo prestamo");
        jLabelTipoPrestamo.setFocusable(false);

        buttonGroup1.add(jRadioButtonPInterno);
        jRadioButtonPInterno.setText("Interno");
        jRadioButtonPInterno.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jRadioButtonPInternoActionPerformed(evt);
            }
        });
        jRadioButtonPInterno.addKeyListener(new java.awt.event.KeyAdapter() {
            public void keyPressed(java.awt.event.KeyEvent evt) {
                jRadioButtonPInternoKeyPressed(evt);
            }
        });

        buttonGroup1.add(jRadioButtonPExterno);
        jRadioButtonPExterno.setText("Externo");
        jRadioButtonPExterno.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jRadioButtonPExternoActionPerformed(evt);
            }
        });
        jRadioButtonPExterno.addKeyListener(new java.awt.event.KeyAdapter() {
            public void keyPressed(java.awt.event.KeyEvent evt) {
                jRadioButtonPExternoKeyPressed(evt);
            }
        });

        javax.swing.GroupLayout jPanelTipoPrestamoLayout = new javax.swing.GroupLayout(jPanelTipoPrestamo);
        jPanelTipoPrestamo.setLayout(jPanelTipoPrestamoLayout);
        jPanelTipoPrestamoLayout.setHorizontalGroup(
            jPanelTipoPrestamoLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanelTipoPrestamoLayout.createSequentialGroup()
                .addContainerGap()
                .addComponent(jLabelTipoPrestamo)
                .addGap(18, 18, 18)
                .addComponent(jRadioButtonPInterno, javax.swing.GroupLayout.PREFERRED_SIZE, 63, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(18, 18, 18)
                .addComponent(jRadioButtonPExterno)
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );
        jPanelTipoPrestamoLayout.setVerticalGroup(
            jPanelTipoPrestamoLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanelTipoPrestamoLayout.createSequentialGroup()
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                .addGroup(jPanelTipoPrestamoLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jRadioButtonPInterno)
                    .addComponent(jLabelTipoPrestamo)
                    .addComponent(jRadioButtonPExterno))
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );

        jPanelBotones.setOpaque(false);

        jButtonCancelar.setText("Cancelar");
        jButtonCancelar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButtonCancelarActionPerformed(evt);
            }
        });
        jButtonCancelar.addKeyListener(new java.awt.event.KeyAdapter() {
            public void keyPressed(java.awt.event.KeyEvent evt) {
                jButtonCancelarKeyPressed(evt);
            }
        });

        jButtonAceptar.setText("Aceptar");
        jButtonAceptar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButtonAceptarActionPerformed(evt);
            }
        });
        jButtonAceptar.addKeyListener(new java.awt.event.KeyAdapter() {
            public void keyPressed(java.awt.event.KeyEvent evt) {
                jButtonAceptarKeyPressed(evt);
            }
        });

        javax.swing.GroupLayout jPanelBotonesLayout = new javax.swing.GroupLayout(jPanelBotones);
        jPanelBotones.setLayout(jPanelBotonesLayout);
        jPanelBotonesLayout.setHorizontalGroup(
            jPanelBotonesLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanelBotonesLayout.createSequentialGroup()
                .addContainerGap()
                .addComponent(jButtonAceptar)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                .addComponent(jButtonCancelar)
                .addContainerGap())
        );
        jPanelBotonesLayout.setVerticalGroup(
            jPanelBotonesLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanelBotonesLayout.createSequentialGroup()
                .addContainerGap()
                .addGroup(jPanelBotonesLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jButtonCancelar)
                    .addComponent(jButtonAceptar))
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );

        jPanelDatosPrestamo.setOpaque(false);

        jLabelDosPuntos.setText(":");

        jTextFieldHora.setForeground(new java.awt.Color(153, 153, 153));
        jTextFieldHora.setText("00");
        jTextFieldHora.setEnabled(false);
        jTextFieldHora.addFocusListener(new java.awt.event.FocusAdapter() {
            public void focusGained(java.awt.event.FocusEvent evt) {
                jTextFieldHoraFocusGained(evt);
            }
            public void focusLost(java.awt.event.FocusEvent evt) {
                jTextFieldHoraFocusLost(evt);
            }
        });
        jTextFieldHora.addKeyListener(new java.awt.event.KeyAdapter() {
            public void keyPressed(java.awt.event.KeyEvent evt) {
                jTextFieldHoraKeyPressed(evt);
            }
            public void keyTyped(java.awt.event.KeyEvent evt) {
                jTextFieldHoraKeyTyped(evt);
            }
        });

        jTextFieldMinutos.setForeground(new java.awt.Color(153, 153, 153));
        jTextFieldMinutos.setText("00");
        jTextFieldMinutos.setEnabled(false);
        jTextFieldMinutos.addFocusListener(new java.awt.event.FocusAdapter() {
            public void focusGained(java.awt.event.FocusEvent evt) {
                jTextFieldMinutosFocusGained(evt);
            }
            public void focusLost(java.awt.event.FocusEvent evt) {
                jTextFieldMinutosFocusLost(evt);
            }
        });
        jTextFieldMinutos.addKeyListener(new java.awt.event.KeyAdapter() {
            public void keyPressed(java.awt.event.KeyEvent evt) {
                jTextFieldMinutosKeyPressed(evt);
            }
            public void keyTyped(java.awt.event.KeyEvent evt) {
                jTextFieldMinutosKeyTyped(evt);
            }
        });

        jLabelHoraDevolucion.setText("*Hora de Devolucion   :");

        jTextFieldNumInventario.setForeground(new java.awt.Color(153, 153, 153));
        jTextFieldNumInventario.setText("Buscar Equipo...");
        jTextFieldNumInventario.addFocusListener(new java.awt.event.FocusAdapter() {
            public void focusGained(java.awt.event.FocusEvent evt) {
                jTextFieldNumInventarioFocusGained(evt);
            }
            public void focusLost(java.awt.event.FocusEvent evt) {
                jTextFieldNumInventarioFocusLost(evt);
            }
        });
        jTextFieldNumInventario.addKeyListener(new java.awt.event.KeyAdapter() {
            public void keyPressed(java.awt.event.KeyEvent evt) {
                jTextFieldNumInventarioKeyPressed(evt);
            }
            public void keyTyped(java.awt.event.KeyEvent evt) {
                jTextFieldNumInventarioKeyTyped(evt);
            }
        });

        jLabelPMAM.setText("PM");
        jLabelPMAM.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                jLabelPMAMMouseClicked(evt);
            }
        });

        jLabelMarca.setText("Marca     :");

        jLabelArticulo.setText("Articulo   :");

        jLabelDescription.setText("Descripcion   :");

        javax.swing.GroupLayout jPanelDatosPrestamoLayout = new javax.swing.GroupLayout(jPanelDatosPrestamo);
        jPanelDatosPrestamo.setLayout(jPanelDatosPrestamoLayout);
        jPanelDatosPrestamoLayout.setHorizontalGroup(
            jPanelDatosPrestamoLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanelDatosPrestamoLayout.createSequentialGroup()
                .addContainerGap()
                .addGroup(jPanelDatosPrestamoLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(jPanelDatosPrestamoLayout.createSequentialGroup()
                        .addComponent(jLabelDescription)
                        .addGap(18, 18, 18)
                        .addComponent(jLabelDescripcionEncontrada, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
                    .addGroup(jPanelDatosPrestamoLayout.createSequentialGroup()
                        .addGroup(jPanelDatosPrestamoLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addGroup(jPanelDatosPrestamoLayout.createSequentialGroup()
                                .addComponent(jLabelHoraDevolucion)
                                .addGap(18, 18, 18)
                                .addComponent(jTextFieldHora, javax.swing.GroupLayout.PREFERRED_SIZE, 26, javax.swing.GroupLayout.PREFERRED_SIZE)
                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                                .addComponent(jLabelDosPuntos))
                            .addGroup(jPanelDatosPrestamoLayout.createSequentialGroup()
                                .addComponent(jLabelArticulo)
                                .addGap(18, 18, 18)
                                .addComponent(jLabelArticuloEncontrado, javax.swing.GroupLayout.PREFERRED_SIZE, 80, javax.swing.GroupLayout.PREFERRED_SIZE)))
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addGroup(jPanelDatosPrestamoLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addGroup(jPanelDatosPrestamoLayout.createSequentialGroup()
                                .addComponent(jTextFieldMinutos, javax.swing.GroupLayout.PREFERRED_SIZE, 26, javax.swing.GroupLayout.PREFERRED_SIZE)
                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                                .addComponent(jLabelPMAM))
                            .addGroup(jPanelDatosPrestamoLayout.createSequentialGroup()
                                .addComponent(jLabelMarca)
                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                                .addComponent(jLabelMarcaEncontrada, javax.swing.GroupLayout.PREFERRED_SIZE, 80, javax.swing.GroupLayout.PREFERRED_SIZE)))
                        .addGap(0, 37, Short.MAX_VALUE))
                    .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanelDatosPrestamoLayout.createSequentialGroup()
                        .addGap(0, 0, Short.MAX_VALUE)
                        .addComponent(jTextFieldNumInventario, javax.swing.GroupLayout.PREFERRED_SIZE, 105, javax.swing.GroupLayout.PREFERRED_SIZE)))
                .addContainerGap())
        );
        jPanelDatosPrestamoLayout.setVerticalGroup(
            jPanelDatosPrestamoLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanelDatosPrestamoLayout.createSequentialGroup()
                .addContainerGap()
                .addComponent(jTextFieldNumInventario, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(9, 9, 9)
                .addGroup(jPanelDatosPrestamoLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(jLabelArticuloEncontrado, javax.swing.GroupLayout.PREFERRED_SIZE, 14, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(jLabelMarca)
                    .addComponent(jLabelMarcaEncontrada, javax.swing.GroupLayout.PREFERRED_SIZE, 14, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(jLabelArticulo))
                .addGap(18, 18, 18)
                .addGroup(jPanelDatosPrestamoLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
                    .addComponent(jLabelDescription, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                    .addComponent(jLabelDescripcionEncontrada, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
                .addGap(18, 18, 18)
                .addGroup(jPanelDatosPrestamoLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(jPanelDatosPrestamoLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                        .addComponent(jTextFieldHora, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addComponent(jLabelDosPuntos)
                        .addComponent(jTextFieldMinutos, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addComponent(jLabelPMAM))
                    .addComponent(jLabelHoraDevolucion))
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addComponent(jPanelBotones, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
            .addComponent(jPanelTipoPrestamo, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
            .addComponent(jPanelDatosPrestamo, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
            .addComponent(jPanelDatosAlumno, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
                .addComponent(jPanelDatosAlumno, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addComponent(jPanelTipoPrestamo, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addComponent(jPanelDatosPrestamo, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addComponent(jPanelBotones, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
        );

        pack();
    }// </editor-fold>//GEN-END:initComponents

    private void jLabelPMAMMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_jLabelPMAMMouseClicked
        cambiarPMAM();
    }//GEN-LAST:event_jLabelPMAMMouseClicked

    private void jTextFieldMinutosKeyPressed(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_jTextFieldMinutosKeyPressed
        controladorCampos.enterTab(evt);
    }//GEN-LAST:event_jTextFieldMinutosKeyPressed

    private void jTextFieldMinutosFocusLost(java.awt.event.FocusEvent evt) {//GEN-FIRST:event_jTextFieldMinutosFocusLost
        String minutos = obtenerMinutos();
        if(minutos.trim().equals("")){
            String reinicio = "00";
            establecerColorLetras(jTextFieldMinutos, reinicio, Color.BLACK);
            Date horaCompleta = obtenerFechaDevolucion();
            comprobarHoraDevolucion(horaCompleta);
        }else{
            corregirMinutos(minutos);
            Date horaCompleta = obtenerFechaDevolucion();
            comprobarHoraDevolucion(horaCompleta);
        }
    }//GEN-LAST:event_jTextFieldMinutosFocusLost

    private void jTextFieldHoraKeyPressed(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_jTextFieldHoraKeyPressed
        controladorCampos.enterTab(evt);
    }//GEN-LAST:event_jTextFieldHoraKeyPressed

    private void jTextFieldHoraFocusLost(java.awt.event.FocusEvent evt) {//GEN-FIRST:event_jTextFieldHoraFocusLost
        String hora = obtenerHora();
        if(hora.trim().equals("")){
            String reinicio = "00";
            establecerColorLetras(jTextFieldHora, reinicio, Color.BLACK);
            administradorMensajes.mensajeError(CAMPO_OBLIGATORIO, jTextFieldHora);
        }else{
            corregirHora(hora);
            Date horaCompleta = obtenerFechaDevolucion();
            comprobarHoraDevolucion(horaCompleta);
        }
    }//GEN-LAST:event_jTextFieldHoraFocusLost

    private void jTextFieldHoraFocusGained(java.awt.event.FocusEvent evt) {//GEN-FIRST:event_jTextFieldHoraFocusGained
        reestablecerCampo(jTextFieldHora);
        reestablecerCampo(jTextFieldMinutos);
        String campoBlanco = "";
        establecerColorLetras(jTextFieldHora, campoBlanco, Color.black);
    }//GEN-LAST:event_jTextFieldHoraFocusGained

    private void jTextFieldNumInventarioKeyPressed(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_jTextFieldNumInventarioKeyPressed
        controladorCampos.enterTab(evt);
    }//GEN-LAST:event_jTextFieldNumInventarioKeyPressed

    private void jTextFieldNumInventarioFocusLost(java.awt.event.FocusEvent evt) {//GEN-FIRST:event_jTextFieldNumInventarioFocusLost
        String numInven = obtenerNumeroInventario();
        if(numInven.trim().equals("")){
            numInventarioCorrecto = false;
            String datosNoEncontrados = "";
            establecerDatosEquipo(datosNoEncontrados, datosNoEncontrados, datosNoEncontrados);
            administradorMensajes.mensajeError(CAMPO_OBLIGATORIO, jTextFieldNumInventario);
        }else{
            EquipoComputo equipoComputo = obtenerEquipoSolicitado(numInven);
            if(equipoComputo != null){
                if(estaDisponibleEquipo(numInven)){
                    numInventarioCorrecto = true;
                    String articulo = equipoComputo.obtenerNombreArticulo();
                    String marca = equipoComputo.obtenerMarca();
                    String descripcion = equipoComputo.obtenerDescripcion();
                    establecerDatosEquipo(articulo, marca, descripcion);
                    reestablecerCampo(jTextFieldNumInventario);
                }else{
                    numInventarioCorrecto = false;
                    String datosNoEncontrados = "";
                    establecerDatosEquipo(datosNoEncontrados, datosNoEncontrados, datosNoEncontrados);
                    administradorMensajes.mensajeError(EQUIPO_PRESTADO, jTextFieldNumInventario);
                }
            }else{
                numInventarioCorrecto = false;
                String datosNoEncontrados = "";
                establecerDatosEquipo(datosNoEncontrados, datosNoEncontrados, datosNoEncontrados);
                administradorMensajes.mensajeError(EQUIPO_NO_ENCONTRADO, jTextFieldNumInventario);
            }
        }
    }//GEN-LAST:event_jTextFieldNumInventarioFocusLost

    private void jTextFieldNumInventarioFocusGained(java.awt.event.FocusEvent evt) {//GEN-FIRST:event_jTextFieldNumInventarioFocusGained
        reestablecerCampo(jTextFieldNumInventario);
        String campoBlanco = "";
        establecerColorLetras(jTextFieldNumInventario, campoBlanco, Color.black);
    }//GEN-LAST:event_jTextFieldNumInventarioFocusGained

    private void jButtonCancelarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButtonCancelarActionPerformed
        cerrar();
    }//GEN-LAST:event_jButtonCancelarActionPerformed

    private void jButtonCancelarKeyPressed(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_jButtonCancelarKeyPressed
        if(evt.getKeyCode() == KeyEvent.VK_ENTER){
            cerrar();
        }
    }//GEN-LAST:event_jButtonCancelarKeyPressed

    private void jTextFieldMinutosFocusGained(java.awt.event.FocusEvent evt) {//GEN-FIRST:event_jTextFieldMinutosFocusGained
        reestablecerCampo(jTextFieldHora);
        reestablecerCampo(jTextFieldMinutos);
        String campoBlanco = "";
        establecerColorLetras(jTextFieldMinutos, campoBlanco, Color.black);
    }//GEN-LAST:event_jTextFieldMinutosFocusGained

    private void jTextFieldHoraKeyTyped(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_jTextFieldHoraKeyTyped
        final int LONG_MAXIMA = 2;
        String numero = obtenerHora();
        controladorCampos.formatoNumericoLimitado(evt, numero, LONG_MAXIMA);
    }//GEN-LAST:event_jTextFieldHoraKeyTyped

    private void jTextFieldMinutosKeyTyped(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_jTextFieldMinutosKeyTyped
        final int LONG_MAXIMA = 2;
        String minutos = obtenerMinutos();
        controladorCampos.formatoNumericoLimitado(evt, minutos, LONG_MAXIMA);
    }//GEN-LAST:event_jTextFieldMinutosKeyTyped

    private void jTextFieldNumInventarioKeyTyped(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_jTextFieldNumInventarioKeyTyped
        final int LONG_MAXIMA = 8;
        String numInvent = obtenerNumeroInventario();
        controladorCampos.formatoNumericoLimitado(evt, numInvent, LONG_MAXIMA);
    }//GEN-LAST:event_jTextFieldNumInventarioKeyTyped

    private void jRadioButtonPInternoKeyPressed(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_jRadioButtonPInternoKeyPressed
        if(evt.getKeyCode() == KeyEvent.VK_ENTER){
            boolean prestamoInternoSeleccionado = true;
            jRadioButtonPInterno.setSelected(prestamoInternoSeleccionado);
            habilitarCamposHora();
            controladorCampos.enterTab(evt);
        }
    }//GEN-LAST:event_jRadioButtonPInternoKeyPressed

    private void jRadioButtonPExternoKeyPressed(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_jRadioButtonPExternoKeyPressed
        if(evt.getKeyCode() == KeyEvent.VK_ENTER){
            boolean prestamoExternoSeleccionado = true;
            jRadioButtonPExterno.setSelected(prestamoExternoSeleccionado);
            deshabilitarCamposHora();
        }
    }//GEN-LAST:event_jRadioButtonPExternoKeyPressed

    private void jTextFieldBuscarEmpeladoAlumnoFocusGained(java.awt.event.FocusEvent evt) {//GEN-FIRST:event_jTextFieldBuscarEmpeladoAlumnoFocusGained
        reestablecerCampo(jTextFieldBuscarEmpeladoAlumno);
        String campoBlanco = "";
        establecerColorLetras(jTextFieldBuscarEmpeladoAlumno, campoBlanco, Color.black);
    }//GEN-LAST:event_jTextFieldBuscarEmpeladoAlumnoFocusGained

    private void jTextFieldBuscarEmpeladoAlumnoKeyPressed(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_jTextFieldBuscarEmpeladoAlumnoKeyPressed
        controladorCampos.enterTab(evt);
    }//GEN-LAST:event_jTextFieldBuscarEmpeladoAlumnoKeyPressed

    private void jTextFieldBuscarEmpeladoAlumnoKeyTyped(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_jTextFieldBuscarEmpeladoAlumnoKeyTyped
        controladorCampos.formatoAlfaNumerico(evt);
    }//GEN-LAST:event_jTextFieldBuscarEmpeladoAlumnoKeyTyped

    private void jTextFieldBuscarEmpeladoAlumnoFocusLost(java.awt.event.FocusEvent evt) {//GEN-FIRST:event_jTextFieldBuscarEmpeladoAlumnoFocusLost
        String matricula = obtenerMatricula();
        if(matricula.trim().equals("")){    
            claveMatriculaCorrecta = false;
            String datosNoEncontrados = "";
            establecerDatosAlumnoEmpleado(datosNoEncontrados, datosNoEncontrados);
            administradorMensajes.mensajeError(CAMPO_OBLIGATORIO, jTextFieldBuscarEmpeladoAlumno);
        }else{
            Alumno alumno = obtenerAlumnoSolicitado(matricula);
            if(alumno != null){
                GestorAlumnos administradorAlumnos = new GestorAlumnos();
                if(administradorAlumnos.datosAlumnoCompletos(matricula)){
                    jLabelLicenciatura.setText("Licenciatura   :");
                    String nombre = alumno.obtenerNombre();
                    String licenciatura = alumno.obtenerLicenciatura();
                    establecerDatosAlumnoEmpleado(nombre, licenciatura);
                    reestablecerCampo(jTextFieldBuscarEmpeladoAlumno);
                    claveMatriculaCorrecta = true;
                }else{
                    InterfazAltaAlumno completarInformacion = new InterfazAltaAlumno(
                    padre, true, matricula);
                    completarInformacion.setVisible(true);
                    if(completarInformacion.obtenerConfirmacionCompletado()){
                        String nombre = alumno.obtenerNombre();
                        String licenciatura = alumno.obtenerLicenciatura();
                        establecerDatosAlumnoEmpleado(nombre, licenciatura);
                        reestablecerCampo(jTextFieldBuscarEmpeladoAlumno);
                        claveMatriculaCorrecta = true;
                    }else{
                        claveMatriculaCorrecta = false;
                        administradorMensajes.mensajeError(INFO_ALUMNO_INCOMPLETA, jTextFieldBuscarEmpeladoAlumno);
                    }
                }
            }else{
                Empleado empleado = obtenerEmpleadoSolicitado(matricula);
                if(empleado != null){
                    jLabelLicenciatura.setText("Categoria     :");
                    String nombre = empleado.obtenerNombre();
                    String laborEmpelado = empleado.obtenerTipoEmpleado();
                    establecerDatosAlumnoEmpleado(nombre, laborEmpelado);
                    reestablecerCampo(jTextFieldBuscarEmpeladoAlumno);
                    claveMatriculaCorrecta = true;
                }else{
                    claveMatriculaCorrecta = false;
                    String datosNoEncontrados = "";
                    establecerDatosAlumnoEmpleado(datosNoEncontrados, datosNoEncontrados);
                    administradorMensajes.mensajeError(ALUMNO_NO_ENCONTRADO, jTextFieldBuscarEmpeladoAlumno);
                }
            }
        }
    }//GEN-LAST:event_jTextFieldBuscarEmpeladoAlumnoFocusLost

    private void jRadioButtonPInternoActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jRadioButtonPInternoActionPerformed
        habilitarCamposHora();
    }//GEN-LAST:event_jRadioButtonPInternoActionPerformed

    private void jRadioButtonPExternoActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jRadioButtonPExternoActionPerformed
        deshabilitarCamposHora();
    }//GEN-LAST:event_jRadioButtonPExternoActionPerformed

    private void jButtonAceptarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButtonAceptarActionPerformed
        registrarPrestamo();
    }//GEN-LAST:event_jButtonAceptarActionPerformed

    private void jButtonAceptarKeyPressed(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_jButtonAceptarKeyPressed
        if(evt.getKeyCode() == KeyEvent.VK_ENTER){                  
            registrarPrestamo();
        }
    }//GEN-LAST:event_jButtonAceptarKeyPressed

    private void jButtonModificarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButtonModificarActionPerformed
        modificarPrestamo();
    }//GEN-LAST:event_jButtonModificarActionPerformed

    private void jButtonModificarKeyPressed(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_jButtonModificarKeyPressed
        if(evt.getKeyCode() == KeyEvent.VK_ENTER){
            modificarPrestamo();
        }
    }//GEN-LAST:event_jButtonModificarKeyPressed
    
    /**
     * construye la informacion basica del alumnos
     * @return devuleve el alumno contruido
     */
    private Alumno construirAlumno(){
        Alumno alumno = new Alumno();
        
        String nombre = obtenerNombre();
        alumno.establecerNombre(nombre);
        
        String matricula = obtenerMatricula();
        alumno.establecerMatricula(matricula);
        
        return alumno;
    }
    
    /**
     * solicita la informacion del alumno que corresponde a la matricula ingresada
     * @param _matricula
     * @return devuelve la informacion del alumno
     */
    private Alumno obtenerAlumnoSolicitado(String _matricula){
        GestorAlumnos administradorAlumnos = new GestorAlumnos();
        return administradorAlumnos.buscarAlumno(_matricula);
    }
    
    /**
     * busca el equipo de computo con el numero de inventario solicitado
     * @param _numInventario
     * @return devuelve el equipo de computo solicitado
     */
    private EquipoComputo obtenerEquipoSolicitado(String _numInventario){
        GestorEquiposComputo administradorEquipos = new GestorEquiposComputo();
        return administradorEquipos.buscar(_numInventario);
    }
    
    private Empleado obtenerEmpleadoSolicitado(String _matricula){
        GestorEmpleados administradorEmpleados = new GestorEmpleados();
        return administradorEmpleados.buscarEmpleado(_matricula);
    }
    
    /**
     * construye el prestamo apartir de la informacion en los campos
     * @param _nombreAdmin
     * @return Devuelve el prestamo
     */
    private Prestamo construirPrestamo(String _nombreAdmin){
        Prestamo prestamo = new Prestamo();
        
        String numInventario = obtenerNumeroInventario();
        prestamo.establecerNumInventario(numInventario);
        
        String nombreAdmin = _nombreAdmin;
        prestamo.establecerEntregadoPor(nombreAdmin);

        Date fechaPrestamo = obtenerFechaActual();
        prestamo.establecerFechaEntrega(fechaPrestamo);
        
        Date horaDevolucion = obtenerFechaDevolucion();
        prestamo.establecerFechaLimite(horaDevolucion);
        
        String tipoPrestamo = obtenerTipoPrestamo();
        prestamo.establecerTipoPrestamo(tipoPrestamo);
        
        return prestamo;
    }
    
    /**
     * @return Devuelve verdadero en caso de ser prestamo interno
     */
    private boolean esPrestamoInterno(){
        boolean prestamoInterno = true;
        
        if(jRadioButtonPInterno.isSelected()){
            return prestamoInterno;
        }
        
        return !prestamoInterno;
    }
    
    /**
     * verifica que el equipo de computo ingresado este disponible para el prestamo
     * @param _equipo
     * @return Devuelve verdadero en caso de que este disponible el equipo
     */
    private boolean estaDisponibleEquipo(String _numInventario){
        GestorPrestamos administradorPrestamos = new GestorPrestamos();
        return administradorPrestamos.verificarDisponibilidadEquipo(_numInventario);
    }
    
    /**
     * verifica que todos los campos este debidamente llenados
     * @return Devuelve verdadero si y solo si todos los campos estan correctos
     */
    private boolean verificarCamposCompletos(){
        boolean camposCorrectos = true;
        if(claveMatriculaCorrecta){
            if(numInventarioCorrecto){
                if(jRadioButtonPExterno.isSelected()){
                    return camposCorrectos;
                }else{
                    if(jRadioButtonPInterno.isSelected()){
                        if(horaCorrecta){
                            return camposCorrectos;
                        }else{
                            administradorMensajes.mensajeError(NO_TIPO_PRESTAMO);
                            return !camposCorrectos;
                        }
                    }else{
                        administradorMensajes.mensajeError(NO_TIPO_PRESTAMO);
                        return !camposCorrectos;
                    }
                }
            }else{
                administradorMensajes.mensajeError("Error en el numero de inventario", jTextFieldNumInventario);
                return !camposCorrectos;
            }
        }else{
            administradorMensajes.mensajeError("Error en la matricula", jTextFieldBuscarEmpeladoAlumno);
            return !camposCorrectos;
        }
    }
    
    /**
     * obtiene la fecha completa para la devolucion de un prestamo
     * @return Devuelve le fecha de devolucion
     */
    private Date obtenerFechaDevolucion(){
        Date hora = obtenerHoraCompleta();
        Date fecha = new Date();
        if(esPrestamoInterno()){
            fecha.setHours(hora.getHours());
            fecha.setMinutes(hora.getMinutes());
        }else{
            int dia = fecha.getDate();
            fecha.setDate(dia + 1);
            fecha.setHours(20);
            fecha.setMinutes(30);
            fecha.setSeconds(00);
        }
        return fecha;
    }
    
    /**
     * obtiene la fecha en la que se efectuo el prestamo
     * @return 
     */
    private Date obtenerFechaActual(){
        Date fechaPrestamo = new Date();
        return fechaPrestamo;
    }
    
    /**
     * construye la hora de devolucion apartir de la hora y los minutos dados
     * @return devuelve la hora completa
     */
    private Date obtenerHoraCompleta(){
        String hora = obtenerHora();
        String minutos = obtenerMinutos();
        String PMAM = obtenerPMAM();
        String horaDev = hora + ":" + minutos + " " + PMAM;
        SimpleDateFormat formatoHora = new SimpleDateFormat("hh:mm a");
        try {
            return formatoHora.parse(horaDev);
        } catch (ParseException log) {
            administradorMensajes.mensajeError(HORA_ERROR, jTextFieldHora);
            administradorMensajes.mensajeError(HORA_ERROR, jTextFieldMinutos);
            administradorMensajes.mensajeError(log.getMessage());
            return null;
        }
    }
    
    /** 
     * @return devuelve la hora en base a la maquina en la que se corre el programa
     */
    private String obtenerHora(){
        return jTextFieldHora.getText();
    }
    
    /**
     * 
     * @return Devuelve la matricula que se encuentre en el campo de busqueda de
     *          alumno
     */
    private String obtenerMatricula(){
        return jTextFieldBuscarEmpeladoAlumno.getText();
    }
    
    /**
     * 
     * @return devuelve los minutos en base a la maquina en la que se corre l programa
     */
    private String obtenerMinutos(){
        return jTextFieldMinutos.getText();
    }
    
    /**
     * @return devuelve el nombre del alumno o maestro solicitado
     */
    private String obtenerNombre(){
        return jLabelNombreEncontrado.getText();
   }
    
    /**
     * @return devuelve el numero de inventario del campo numInventario
     */
    private String obtenerNumeroInventario(){
        return jTextFieldNumInventario.getText();
    }
    
    /**
     * @return devuelve PM o AM segun se requiera
     */
    private String obtenerPMAM(){
        return jLabelPMAM.getText();
    }
    
    /**
     * @return devuelve el tipo de prestamo seleccionado
     */
    private String obtenerTipoPrestamo(){
        if(jRadioButtonPInterno.isSelected()){
            return "Interno";
        }else{
            return "Externo";
        }
    }
    
    /**
     * cambia entre pm o am segun sea la hora designada para la devolucion
     */
    private void cambiarPMAM(){
        String PMAM = obtenerPMAM();
        switch(PMAM){
            case "PM":
                establecerPMAM("AM");
                break;
                
            case "AM":
                establecerPMAM("PM");
                break;
        }
    }

    /**
     * revisa que la hora este correcta
     * @return devuelve verdadero si la hora es correcta
     */
    private void comprobarHoraDevolucion(Date _hora){
        int hora = _hora.getHours();
        int minutos = _hora.getMinutes();
        if( (hora > 0 && hora < 25) && (minutos >= 0 && minutos < 61)){
            Date horActual = obtenerFechaActual();
            if(_hora.after(horActual)){
                horaCorrecta = true;
                reestablecerCampo(jTextFieldHora);
                reestablecerCampo(jTextFieldMinutos);
            }else{
                horaCorrecta = false;
                administradorMensajes.mensajeError(HORA_PASADA, jTextFieldHora);
                administradorMensajes.mensajeError(HORA_ERROR, jTextFieldMinutos);
            }
        }else{
            horaCorrecta = false;
            administradorMensajes.mensajeError(HORA_ERROR, jTextFieldHora);
            administradorMensajes.mensajeError(HORA_ERROR, jTextFieldMinutos);
        }
    }
    
    /**
     * cancela la accion de prestamo un nuevo articulo
     */
    private void cerrar(){
        dispose();
    }
    
    /**
     * prepara la interfaz para modificar el prestamo seleccionado
     */
    private void corregirBotonModificar(){
        jPanelBotones.remove(jButtonAceptar);
        
        javax.swing.GroupLayout jPanelBotonesLayout = new javax.swing.GroupLayout(jPanelBotones);
        jPanelBotones.setLayout(jPanelBotonesLayout);
        jPanelBotonesLayout.setHorizontalGroup(
            jPanelBotonesLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanelBotonesLayout.createSequentialGroup()
                .addContainerGap()
                .addComponent(jButtonModificar)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                .addComponent(jButtonCancelar)
                .addContainerGap())
        );
        jPanelBotonesLayout.setVerticalGroup(
            jPanelBotonesLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanelBotonesLayout.createSequentialGroup()
                .addContainerGap()
                .addGroup(jPanelBotonesLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jButtonCancelar)
                    .addComponent(jButtonModificar))
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );
    }
    
    /**
     * corrige el formato de hora para que este en forma de 2 digitos
     * @param _hora 
     */
    private void corregirHora(String _hora){
        int longitud = _hora.length();
        String horaTemp = _hora;
        if(longitud < 2){
            horaTemp = "0" + _hora;
            
        }
        establecerHora(horaTemp);
    }
   
    /**
     * corrige el formato de los minutos para que este en forma de 2 digitos
     * @param _minutos 
     */
    private void corregirMinutos(String _minutos){
        int longitud = _minutos.length();
        String minutos = _minutos;
        if(longitud < 2){
            minutos = "0" + _minutos;
        }
        establecerMinutos(minutos);
    }
    
    /**
     * desactiva los campos para ingresar hora cuando se selecciona el tipo de 
     * prestamo externo
     */
    private void deshabilitarCamposHora(){
        boolean desactivar = false;
        jTextFieldHora.setEnabled(desactivar);
        jTextFieldMinutos.setEnabled(desactivar);
        jLabelPMAM.setEnabled(desactivar);
    }
    
    /**
     * establece el color y el texto deseado para el campo solicitado. generalmente
     * usado para poner las letras de color negro y el texto en blaco cuando un
     * textfield gana el foco
     * @param _campoSolicitado
     * @param _texto
     * @param _color 
     */
    private void establecerColorLetras(
     JTextField _campoSolicitado, 
     String _texto, 
     Color _color
    ){
        _campoSolicitado.setText(_texto);
        _campoSolicitado.setForeground(_color);
    }
    
    /**
     * establece el nombre y la licenciatura del alumno o el nombre y la labor que desempeña
     * el empleado en los campos correspondientes
     * @param _nombre nombre del alumno encontrado
     * @param  _licenciatura licenciatura del alumno
     */
    private void establecerDatosAlumnoEmpleado(String _nombre, String _licenciatura){
        jLabelNombreEncontrado.setText(_nombre);
        jLabelLicenciaturaEncontrada.setText(_licenciatura);
    }
    
    /**
     * establece los datos del equipo encontrado
     * @param _articulo articulo del centro de computo
     * @param _marca    marca del articulo
     * @param _descripcion descripcion del articulo
     */
    private void establecerDatosEquipo(
     String _articulo,
     String _marca,
     String _descripcion
    ){
        jLabelArticuloEncontrado.setText(_articulo);
        jLabelMarcaEncontrada.setText(_marca);
        jLabelDescripcionEncontrada.setText(_descripcion);
    }
    
    /**
     * establece la hora en el campo correspondiente
     * @param _hora 
     */
    private void establecerHora(String _hora){
        jTextFieldHora.setText(_hora);
    }
    
    /**
     * establece la matricula que le pasen en el campo de busqueda para los alumnos
     * @param _matricula 
     */
    private void establecerMatricula(String _matricula){
        jTextFieldBuscarEmpeladoAlumno.setText(_matricula);
    }
    
    /**
     * establece los minutos en el campo correspondiente
     * @param _minutos 
     */
    private void establecerMinutos(String _minutos){
        jTextFieldMinutos.setText(_minutos);
    }
    
    /**
     * establecer el numero de inventario del equipo de computo en el campo de busqueda
     * de equipos
     * @param _numInventario 
     */
    private void establecerNumInventario(String _numInventario){
        jTextFieldNumInventario.setText(_numInventario);
    }
    
    /**
     * establece el formato PM o AM segun se requiera
     * @param _PMAM
     */
    private void establecerPMAM(String _PMAM){
        jLabelPMAM.setText(_PMAM);
    }
    
    /**
     * selecciona el tipo de prestamo segun el tipo de prestamo indicado
     * @param _tipoPrestamo 
     */
    private void establecerTipoPrestamo(String _tipoPrestamo){
        switch(_tipoPrestamo){
            case "Interno":
                boolean prestamoInternoSeleccionado = true;
                jRadioButtonPInterno.setSelected(prestamoInternoSeleccionado);
                habilitarCamposHora();
                break;
            case "Externo":
                boolean prestamoExternoSeleccionado = true;
                jRadioButtonPInterno.setSelected(prestamoExternoSeleccionado);
                deshabilitarCamposHora();
                break;
        }
    }
    
    /**
     * habilita los campos para ingresar la hora para los tipos de prestamo internos
     */
    private void habilitarCamposHora(){
        boolean activar = true;
        jTextFieldHora.setEnabled(activar);
        jTextFieldMinutos.setEnabled(activar);
        jLabelPMAM.setEnabled(activar);
    }
    
    /**
     * establece los datos del alumno segun la matricula que le pasen
     * @param _matricula 
     */
    private void llenarDatosAlumno(String _matricula){
        establecerMatricula(_matricula);
        Alumno alumno = obtenerAlumnoSolicitado(_matricula);
        String nombre = alumno.obtenerNombre();
        String licenciatura = alumno.obtenerLicenciatura();
        establecerDatosAlumnoEmpleado(nombre, licenciatura);
        
        final boolean desactivados = false;
        jTextFieldBuscarEmpeladoAlumno.setFocusable(desactivados);
        jTextFieldBuscarEmpeladoAlumno.setEnabled(desactivados);
    }
    
    /**
     * llena los datos del prestamo seleccionado en los campos correspondientes
     * @param _numInventario
     * @param _tipoPrestamo
     * @param _fechaDevolucion 
     */
    private void llenarDatosPrestamo(
     String _numInventario,
     String _tipoPrestamo,
     String _fechaDevolucion
    ){
        establecerTipoPrestamo(_tipoPrestamo);
        establecerNumInventario(_numInventario);
        EquipoComputo equipoComputo = obtenerEquipoSolicitado(_numInventario);
        String articulo = equipoComputo.obtenerNombreArticulo();
        String marca = equipoComputo.obtenerMarca();
        String descripcion = equipoComputo.obtenerDescripcion();
        establecerDatosEquipo(articulo, marca, descripcion);
        establecerHora(marca);
        
        SimpleDateFormat formatoHora = new SimpleDateFormat("HH:mm a");
        try {
            Date fechaDevolucion = formatoHora.parse(_fechaDevolucion);
            corregirHora(Integer.toString(fechaDevolucion.getHours()));
            corregirMinutos(Integer.toString(fechaDevolucion.getMinutes()));
        } catch (ParseException log) {
            administradorMensajes.mensajeError(log.getMessage());
        }
    }
    
    /**
     * solicita que el prestamo del alumno seleccionado sea modificado
     */
    private void modificarPrestamo(){
        if(verificarCamposCompletos()){
            SubInterfazCredenciales subInterfazCredenciales = new SubInterfazCredenciales(padre, "Credenciales", true);
            subInterfazCredenciales.setVisible(true);
            if(subInterfazCredenciales.sonCredencialesCorrectas()){    
                String nombreAdmin = subInterfazCredenciales.obtenerQuienEntrego();
                /Alumno alumno = construirAlumno();
                Prestamo prestamo = construirPrestamo(nombreAdmin);
                GestorPrestamos administradorPrestamos = new GestorPrestamos();
                administradorPrestamos.modificarPrestamo(prestamo);
                cerrar();
            }
        }
    }
    
    /**
     * pone en blanco los mensajes del campo de texto especificado
     * @param _campoSolicitado 
     */
    private void reestablecerCampo(JTextField _campoSolicitado){
        _campoSolicitado.setBackground(Color.white);
        _campoSolicitado.setToolTipText(null);
    }
    
    /**
     * solicita el registro del nuevo prestamo a la base de datos
     */
    private void registrarPrestamo(){
        if(verificarCamposCompletos()){
            SubInterfazCredenciales subInterfazCredenciales = new SubInterfazCredenciales(padre, "Credenciales", true);
            subInterfazCredenciales.setVisible(true);
            if(subInterfazCredenciales.sonCredencialesCorrectas()){    
                String nombreAdmin = subInterfazCredenciales.obtenerQuienEntrego();
                /Alumno alumno = construirAlumno();
                Prestamo prestamo = construirPrestamo(nombreAdmin);
                GestorPrestamos administradorPrestamos = new GestorPrestamos();
                administradorPrestamos.nuevoPrestamo(prestamo);
                cerrar();
            }
        }
    }
    
    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.ButtonGroup buttonGroup1;
    private javax.swing.JButton jButtonAceptar;
    private javax.swing.JButton jButtonCancelar;
    private javax.swing.JButton jButtonModificar;
    private javax.swing.JLabel jLabelArticulo;
    private javax.swing.JLabel jLabelArticuloEncontrado;
    private javax.swing.JLabel jLabelDescripcionEncontrada;
    private javax.swing.JLabel jLabelDescription;
    private javax.swing.JLabel jLabelDosPuntos;
    private javax.swing.JLabel jLabelHoraDevolucion;
    private javax.swing.JLabel jLabelLicenciatura;
    private javax.swing.JLabel jLabelLicenciaturaEncontrada;
    private javax.swing.JLabel jLabelMarca;
    private javax.swing.JLabel jLabelMarcaEncontrada;
    private javax.swing.JLabel jLabelNombre;
    private javax.swing.JLabel jLabelNombreEncontrado;
    private javax.swing.JLabel jLabelPMAM;
    private javax.swing.JLabel jLabelTipoPrestamo;
    private javax.swing.JPanel jPanelBotones;
    private javax.swing.JPanel jPanelDatosAlumno;
    private javax.swing.JPanel jPanelDatosPrestamo;
    private javax.swing.JPanel jPanelTipoPrestamo;
    private javax.swing.JRadioButton jRadioButtonPExterno;
    private javax.swing.JRadioButton jRadioButtonPInterno;
    private javax.swing.JTextField jTextFieldBuscarEmpeladoAlumno;
    private javax.swing.JTextField jTextFieldHora;
    private javax.swing.JTextField jTextFieldMinutos;
    private javax.swing.JTextField jTextFieldNumInventario;
    // End of variables declaration//GEN-END:variables
    private boolean claveMatriculaCorrecta;
    private boolean numInventarioCorrecto;
    private boolean horaCorrecta;
    
    private final Frame padre;
    private final String prestamoOriginal;
    private final ControladorCamposTexto controladorCampos;
    private final GestorMensajes administradorMensajes;
}
